package com.artisan.si.service;

import com.artisan.si.model.Order;
import com.artisan.si.repository.OrderRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * Order 业务逻辑服务类
 * 负责处理订单相关的业务逻辑
 */
@Service
public class OrderService {
    
    private static final Logger logger = LoggerFactory.getLogger(OrderService.class);
    
    private final OrderRepository orderRepository;

    /**
     * 构造函数注入
     * @param orderRepository 订单数据访问层
     */
    public OrderService(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }

    /**
     * 处理订单的业务方法
     * 这个方法会被 Spring Integration 的 ServiceActivator 调用
     * @param order 待处理的订单
     * @return 处理后保存的订单
     */
    @Transactional
    public Order handleOrder(Order order) {
        logger.info("开始处理订单: {}", order);
        
        // 在真实场景中，这里可以进行：
        // 1. 业务验证（库存检查、价格验证等）
        // 2. 数据转换和清理
        // 3. 发布业务事件
        // 4. 调用外部服务
        
        // 创建新的订单实例，确保总是插入新记录而不是更新现有记录
        Order newOrder = new Order();
        newOrder.setProduct(order.getProduct());
        newOrder.setQuantity(order.getQuantity());
        // ID 保持为 null，让 JPA 自动生成
        
        logger.debug("创建新订单实例: product={}, quantity={}", 
                    newOrder.getProduct(), newOrder.getQuantity());
        
        // 保存订单到数据库
        Order savedOrder = orderRepository.save(newOrder);
        
        logger.info("OrderService: 成功保存订单 id={}, product={}, quantity={}", 
                   savedOrder.getId(), savedOrder.getProduct(), savedOrder.getQuantity());
        
        return savedOrder;
    }
    
    /**
     * 验证订单的业务方法
     * @param order 待验证的订单
     * @return 验证结果
     */
    public boolean validateOrder(Order order) {
        if (order == null) {
            logger.warn("订单为空，验证失败");
            return false;
        }
        
        if (order.getProduct() == null || order.getProduct().trim().isEmpty()) {
            logger.warn("产品名称为空，验证失败: {}", order);
            return false;
        }
        
        if (order.getQuantity() <= 0) {
            logger.warn("订单数量无效，验证失败: {}", order);
            return false;
        }
        
        logger.debug("订单验证通过: {}", order);
        return true;
    }
}
